#ifndef GY_STENCILGROUP_H
#define GY_STENCILGROUP_H

#include "GY_ContainerTransform.h"
#include "GY_ControlLibrary_global.h"
#include "GY_ClippingToolContainer.h"

class GY_CONTROLLIBRARY_EXPORT GY_StencilGroup : public GY_ContainerTransform
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_StencilGroup(const QString &guid,QGraphicsItem *parent = nullptr);
    ~GY_StencilGroup();
    /**
     * @brief addItem 组中添加图元
     * @param item
     * @return
     */
    virtual bool addItem(GY_Object *pItem);
    //!继承基类重写
    GY_Object * copyItem(const QString &guid = QString());
    /**
     * @brief removItem 移除组中的图元
     * @param guid 图元的guid
     * @return 是否移除成功
     */
    virtual bool removItem(const QString &guid);
    /**
     * @brief removItem 移除图元
     * @param pItem 图元指针
     * @return 是否移除成功
     */
    virtual bool removItem(const GY_Object *pItem);
//    QPainterPath shape() const;
    QVariant itemChange(GraphicsItemChange change, const QVariant &value);
private:
    /**
     * @brief m_pClippingToolContainer 剪切容器
     */
    GY_ClippingToolContainer *m_pClippingToolContainer;
    /**
     * @brief m_ItemVector 储存加入容器的对象
     */
    QVector<GY_Object*> m_ItemVector;
    /**
     * @brief m_Size 层级
     */
    int m_Size = 0;
private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief updatePosition 更新位置
     * @param name 属性名称
     * @param value 位置
     * @return 是否更新成功
     */
    bool updatePosition(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 是否隐藏
     * @param name 属性名称
     * @param value bool值
     * @return 是否更新成功
     */
    bool updateIsVisible(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 是否剪切
     * @param name 属性名称
     * @param value bool值
     * @return 是否更新成功
     */
    bool updateEnableStencil(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 剪切内外
     * @param name 属性名称
     * @param value true外false内
     * @return 是否更新成功
     */
    bool updateInvertStencil(const QString &name, const QVariant &value);
    /**
     * @brief updateDraw 更新绘制
     */
    void updateDraw();

};

#endif // GY_STENCILGROUP_H
